# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.CloudDebugger.V2.Model.Breakpoint do
  @moduledoc """
  ------------------------------------------------------------------------------ ## Breakpoint (the resource) Represents the breakpoint specification, status and results.

  ## Attributes

  *   `action` (*type:* `String.t`, *default:* `nil`) - Action that the agent should perform when the code at the breakpoint location is hit.
  *   `canaryExpireTime` (*type:* `DateTime.t`, *default:* `nil`) - The deadline for the breakpoint to stay in CANARY_ACTIVE state. The value is meaningless when the breakpoint is not in CANARY_ACTIVE state.
  *   `condition` (*type:* `String.t`, *default:* `nil`) - Condition that triggers the breakpoint. The condition is a compound boolean expression composed using expressions in a programming language at the source location.
  *   `createTime` (*type:* `DateTime.t`, *default:* `nil`) - Time this breakpoint was created by the server in seconds resolution.
  *   `evaluatedExpressions` (*type:* `list(GoogleApi.CloudDebugger.V2.Model.Variable.t)`, *default:* `nil`) - Values of evaluated expressions at breakpoint time. The evaluated expressions appear in exactly the same order they are listed in the `expressions` field. The `name` field holds the original expression text, the `value` or `members` field holds the result of the evaluated expression. If the expression cannot be evaluated, the `status` inside the `Variable` will indicate an error and contain the error text.
  *   `expressions` (*type:* `list(String.t)`, *default:* `nil`) - List of read-only expressions to evaluate at the breakpoint location. The expressions are composed using expressions in the programming language at the source location. If the breakpoint action is `LOG`, the evaluated expressions are included in log statements.
  *   `finalTime` (*type:* `DateTime.t`, *default:* `nil`) - Time this breakpoint was finalized as seen by the server in seconds resolution.
  *   `id` (*type:* `String.t`, *default:* `nil`) - Breakpoint identifier, unique in the scope of the debuggee.
  *   `isFinalState` (*type:* `boolean()`, *default:* `nil`) - When true, indicates that this is a final result and the breakpoint state will not change from here on.
  *   `labels` (*type:* `map()`, *default:* `nil`) - A set of custom breakpoint properties, populated by the agent, to be displayed to the user.
  *   `location` (*type:* `GoogleApi.CloudDebugger.V2.Model.SourceLocation.t`, *default:* `nil`) - Breakpoint source location.
  *   `logLevel` (*type:* `String.t`, *default:* `nil`) - Indicates the severity of the log. Only relevant when action is `LOG`.
  *   `logMessageFormat` (*type:* `String.t`, *default:* `nil`) - Only relevant when action is `LOG`. Defines the message to log when the breakpoint hits. The message may include parameter placeholders `$0`, `$1`, etc. These placeholders are replaced with the evaluated value of the appropriate expression. Expressions not referenced in `log_message_format` are not logged. Example: `Message received, id = $0, count = $1` with `expressions` = `[ message.id, message.count ]`.
  *   `stackFrames` (*type:* `list(GoogleApi.CloudDebugger.V2.Model.StackFrame.t)`, *default:* `nil`) - The stack at breakpoint time, where stack_frames[0] represents the most recently entered function.
  *   `state` (*type:* `String.t`, *default:* `nil`) - The current state of the breakpoint.
  *   `status` (*type:* `GoogleApi.CloudDebugger.V2.Model.StatusMessage.t`, *default:* `nil`) - Breakpoint status. The status includes an error flag and a human readable message. This field is usually unset. The message can be either informational or an error message. Regardless, clients should always display the text message back to the user. Error status indicates complete failure of the breakpoint. Example (non-final state): `Still loading symbols...` Examples (final state): * `Invalid line number` referring to location * `Field f not found in class C` referring to condition
  *   `userEmail` (*type:* `String.t`, *default:* `nil`) - E-mail address of the user that created this breakpoint
  *   `variableTable` (*type:* `list(GoogleApi.CloudDebugger.V2.Model.Variable.t)`, *default:* `nil`) - The `variable_table` exists to aid with computation, memory and network traffic optimization. It enables storing a variable once and reference it from multiple variables, including variables stored in the `variable_table` itself. For example, the same `this` object, which may appear at many levels of the stack, can have all of its data stored once in this table. The stack frame variables then would hold only a reference to it. The variable `var_table_index` field is an index into this repeated field. The stored objects are nameless and get their name from the referencing variable. The effective variable is a merge of the referencing variable and the referenced variable.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :action => String.t() | nil,
          :canaryExpireTime => DateTime.t() | nil,
          :condition => String.t() | nil,
          :createTime => DateTime.t() | nil,
          :evaluatedExpressions => list(GoogleApi.CloudDebugger.V2.Model.Variable.t()) | nil,
          :expressions => list(String.t()) | nil,
          :finalTime => DateTime.t() | nil,
          :id => String.t() | nil,
          :isFinalState => boolean() | nil,
          :labels => map() | nil,
          :location => GoogleApi.CloudDebugger.V2.Model.SourceLocation.t() | nil,
          :logLevel => String.t() | nil,
          :logMessageFormat => String.t() | nil,
          :stackFrames => list(GoogleApi.CloudDebugger.V2.Model.StackFrame.t()) | nil,
          :state => String.t() | nil,
          :status => GoogleApi.CloudDebugger.V2.Model.StatusMessage.t() | nil,
          :userEmail => String.t() | nil,
          :variableTable => list(GoogleApi.CloudDebugger.V2.Model.Variable.t()) | nil
        }

  field(:action)
  field(:canaryExpireTime, as: DateTime)
  field(:condition)
  field(:createTime, as: DateTime)
  field(:evaluatedExpressions, as: GoogleApi.CloudDebugger.V2.Model.Variable, type: :list)
  field(:expressions, type: :list)
  field(:finalTime, as: DateTime)
  field(:id)
  field(:isFinalState)
  field(:labels, type: :map)
  field(:location, as: GoogleApi.CloudDebugger.V2.Model.SourceLocation)
  field(:logLevel)
  field(:logMessageFormat)
  field(:stackFrames, as: GoogleApi.CloudDebugger.V2.Model.StackFrame, type: :list)
  field(:state)
  field(:status, as: GoogleApi.CloudDebugger.V2.Model.StatusMessage)
  field(:userEmail)
  field(:variableTable, as: GoogleApi.CloudDebugger.V2.Model.Variable, type: :list)
end

defimpl Poison.Decoder, for: GoogleApi.CloudDebugger.V2.Model.Breakpoint do
  def decode(value, options) do
    GoogleApi.CloudDebugger.V2.Model.Breakpoint.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.CloudDebugger.V2.Model.Breakpoint do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
